home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / OneOfCluster.C < prev    next >
C/C++ Source or Header  |  1990-12-04  |  2KB  |  91 lines

  1. //$OneOfCluster$
  2.  
  3. #include "OneOfCluster.h"
  4. #include "Buttons.h"
  5. #include "OrdColl.h"
  6.  
  7. //---- OneOfCluster ------------------------------------------------------------
  8.  
  9. MetaImpl0(OneOfCluster);
  10.  
  11. OneOfCluster::OneOfCluster(int id, VObjAlign a, Point g, Collection *cp)
  12.                         : Cluster(id, a, g, cp)
  13. {
  14.     Init(0);
  15. }
  16.  
  17. OneOfCluster::OneOfCluster(int id, VObjAlign a, Point g, VObject *va_(vop), ...)
  18.                         : Cluster(id, a, g, (Collection*)0)
  19. {
  20.     va_list ap;
  21.     va_start(ap,va_(vop));
  22.     Add(va_(vop));
  23.     SetItems(ap);
  24.     Init(0);
  25.     va_end(ap);
  26. }
  27.  
  28. OneOfCluster::OneOfCluster(int id, VObjAlign a, Point g, char *va_(cp), ...)
  29.                         : Cluster(id, a, g, (Collection*)0)
  30. {
  31.     char *t;
  32.     va_list ap;
  33.     va_start(ap,va_(cp));
  34.     list= new OrdCollection;
  35.     for (int i= 0; ;i++) {
  36.     if (i == 0)
  37.         t= va_(cp);
  38.     else
  39.         if ((t= va_arg(ap, char*)) == 0)
  40.         break;
  41.     list->Add(new LabeledButton(id+i, t));
  42.     }
  43.     Init(0);
  44.     va_end(ap);
  45. }
  46.  
  47. void OneOfCluster::Init(int n)
  48. {
  49.     if (n >= 0 && n < Size())
  50.     SetItemOn(At(n)->GetId()); 
  51.     SetFlag(eVObjVFixed);
  52. }
  53.  
  54. void OneOfCluster::SetItemOn(int id)
  55. {
  56.     if (Size() <= 0)
  57.     return;
  58.     Iter next(list);
  59.     VObject *dip;
  60.  
  61.     // ForceRedraw();
  62.     while (dip= (VObject*) next()) {
  63.     int did= dip->GetId();
  64.     dip->SendDown(did, cPartSetState, (void*) (did == id));
  65.     }
  66. }
  67.     
  68. int OneOfCluster::GetCurrentItem()
  69. {
  70.     if (Size() <= 0)
  71.     return cIdNone;
  72.     Iter next(list);
  73.     VObject *dip;
  74.     
  75.     bool isSet= FALSE;
  76.     while (dip= (VObject*) next()) {
  77.     dip->SendDown(cIdNone, cPartStateIsOn, &isSet);
  78.     if (isSet)
  79.         return dip->GetId();
  80.     }
  81.     return cIdNone;
  82. }
  83.  
  84. void OneOfCluster::Control(int id, int part, void *v)
  85. {
  86.     if (part == cPartToggle) {
  87.     SetItemOn(id);
  88.     Cluster::Control(GetId(), id, v);
  89.     }
  90. }
  91.